// Run an operating system command and send the output to the console.
package sopa.java.misc;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class OSExecute
{
    public static void command(String command)
    {
        boolean err = false;
        try
        {
            final Process process = new ProcessBuilder(command.split(" ")).start();
            final BufferedReader results = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String s;
            while ((s = results.readLine()) != null)
            {
                System.out.println(s);
            }
            final BufferedReader errors = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            // Report errors and return nonzero value
            // to calling process if there are problems:
            while ((s = errors.readLine()) != null)
            {
                System.err.println(s);
                err = true;
            }
        } catch (final Exception e)
        {
            // Compensate for Windows 2000, which throws an
            // exception for the default command line:
            if (!command.startsWith("CMD /C"))
            {
                command("CMD /C " + command);
            }
            else
            {
                throw new RuntimeException(e);
            }
        }
        if (err)
        {
            throw new RuntimeException("Errors executing " + command);
        }
    }

    // Demonstration of how to use it:
    public static void main(String[] args)
    {
        OSExecute.command("%SystemRoot%\\system32\\services.msc");
    }
}
